package com.hoshino.momochi.service;

import com.hoshino.momochi.model.DTO.MessageDTO;
import com.hoshino.momochi.model.domain.Blog;

import java.util.List;

public interface RedisService {

    int havePage = 0;
    int endPageBlogs = 0;

    /**
     * 缓存博客
     *
     * @param pages     页数
     * @param blogList  博客列表 不含详细信息
     * @param pageInfo  每一页条数
     * @param blogFront key前缀
     */
    void CacheBlogPage(int pages, List<Blog> blogList, int pageInfo, String blogFront);


    /**
     * 缓存 blog 简要信息
     */
    String getCacheBlog(String blogFront, int need_page);

    /**
     * 缓存博客信息 不分页
     *
     * @param blogList
     */
    void CacheBlog(List<Blog> blogList);

    String getCacheBlogN();

    /**
     * 登录次数 限制
     *
     * @return
     */
    Number LimitLogin(String prefix, String key, String ip, int limitCount, int limitPeriod);

    /**
     * 创建并设置过期时间 token
     *
     * @return
     */
    Number MaintainToken(String token, Long id, int latetime);

    /**
     * 记录 用户是否登录， 如果登录 再次登录则清除之前的登录状态
     *
     * @param uid
     * @param token
     * @return
     */
    void MapUserIdToToken(Long uid, String token, int latetime);

    /**
     * @param keys      用户名称列表
     * @param userIndex key
     */
    void CacheUsername(List<String> keys, String userIndex);

    /**
     * 检验 username是否存在
     *
     * @param username
     * @return
     */
    Number CheckUsername(String username);

    /**
     * 新增用户名
     *
     * @param username
     */
    void AddUsername(String username);

    /**
     * 删除用户
     *
     * @param token
     */
    void RevokeUsername(String token);

    /**
     * 离线消息缓存
     *
     * @param pullId
     * @param messageDTO
     */
    void MessageCache(Long pullId, MessageDTO messageDTO);

    /**
     * 拉取消息
     *
     * @param id
     * @return
     */
    List<String> PullMessage(Long id);

    /**
     * 博客更新缓存
     */
    void BlogUpdateCache();

    /**
     * 删除用户登录状态
     */
    void DelUserLoginSta(String token);

    /**
     * 保存邮箱-验证码
     *
     * @param mail
     * @param code
     */
    void addMailToCode(String mail, String code);

    /**
     * 根据 邮箱 获取 对应的验证码
     *
     * @param mail
     * @return
     */
    String getMailCode(String mail);
}
